#ifndef UTILS_H
#define UTILS_H

#include <node_api.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

// 常量定义
#define MAX_PARAMS 10

// 参数获取工具函数
double GetNumberFromArgs(napi_env env, napi_callback_info info, int argIndex);
char* GetStringFromArgs(napi_env env, napi_callback_info info, int argIndex);
bool GetBooleanFromArgs(napi_env env, napi_callback_info info, int argIndex);
napi_status GetArrayFromArgs(napi_env env, napi_callback_info info, 
                            int argIndex, napi_value* result, uint32_t* length);
napi_status GetObjectFromArgs(napi_env env, napi_callback_info info, 
                             int argIndex, napi_value* result);

// 值创建工具函数
napi_value CreateNumber(napi_env env, double value);
napi_value CreateString(napi_env env, const char* value);
napi_value CreateBoolean(napi_env env, bool value);
napi_value CreateArray(napi_env env, size_t length);
napi_value CreateObject(napi_env env);
napi_value CreateFunction(napi_env env, const char* name, napi_callback cb);
napi_value CreateNull(napi_env env);
napi_value CreateUndefined(napi_env env);

// 属性操作工具函数
napi_status SetProperty(napi_env env, napi_value object, 
                       const char* name, napi_value value);
napi_status GetProperty(napi_env env, napi_value object, 
                       const char* name, napi_value* value);
napi_value CallFunction(napi_env env, napi_value func, 
                       size_t argc, const napi_value* argv);

// 错误处理工具函数
napi_status ThrowError(napi_env env, const char* message);
napi_status ThrowTypeError(napi_env env, const char* message);
napi_status ThrowRangeError(napi_env env, const char* message);

#ifdef __cplusplus
}
#endif

#endif // UTILS_H